<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <title>Guia de In&iacute;cio R&aacute;pido do Zend_Controller - Zend Framework Manual</title>

    <link href="../css/shCore.css" rel="stylesheet" type="text/css" />
    <link href="../css/shThemeDefault.css" rel="stylesheet" type="text/css" />
    <link href="../css/styles.css" media="all" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>Zend Framework</h1>
<h2>Programmer's Reference Guide</h2>
<ul>
    <li><a href="../en/zend.controller.quickstart.html">Inglês (English)</a></li>
    <li><a href="../pt-br/zend.controller.quickstart.html">Português Brasileiro (Brazilian Portuguese)</a></li>
</ul>
<table width="100%">
    <tr valign="top">
        <td width="85%">
            <table width="100%">
                <tr>
                    <td width="25%" style="text-align: left;">
                    <a href="zend.controller.html">Zend_Controller</a>
                    </td>

                    <td width="50%" style="text-align: center;">
                        <div class="up"><span class="up"><a href="zend.controller.html">Zend_Controller</a></span><br />
                        <span class="home"><a href="manual.html">Guia de Refer&ecirc;ncia do Programador</a></span></div>
                    </td>

                    <td width="25%" style="text-align: right;">
                        <div class="next" style="text-align: right; float: right;"><a href="zend.controller.basics.html">O B&aacute;sico de Zend_Controller</a></div>
                    </td>
                </tr>
            </table>
<hr />
<div id="zend.controller.quickstart" class="section"><div class="info"><h1 class="title">Guia de Início Rápido do Zend_Controller</h1></div>
    

    <div class="section" id="zend.controller.quickstart.introduction"><div class="info"><h1 class="title">Introdução</h1></div>
        

        <p class="para">
            <span class="classname">Zend_Controller</span> é o coração do sistema <acronym class="acronym">MVC</acronym>
            do Zend Framework. <acronym class="acronym">MVC</acronym> significa <a href="http://en.wikipedia.org/wiki/Model-view-controller" class="link external">&raquo; Model-View-Controller</a>
            e é um padrão de projeto voltado para a separação da lógica de aplicação da lógica
            de visualização. <span class="classname">Zend_Controller_Front</span> implementa o padrão
            <a href="http://www.martinfowler.com/eaaCatalog/frontController.html" class="link external">&raquo; Front
            Controller</a>, no qual todos os pedidos são interceptados pelo controlador
            frontal e despachados individualmente para ações baseadas no
            <acronym class="acronym">URL</acronym> requerido.
        </p>

        <p class="para">
            O sistema <span class="classname">Zend_Controller</span> foi construído com a extensibilidade
            em mente, tanto por derivação das classes existentes, como escrevendo novas classes
            que implementam as várias interfaces e classes abstratas que formam a fundação da
            família de classes controladoras, ou escrevendo plugins ou auxiliadores de ação para
            aumentar ou manipular a funcionalidade do sistema.
        </p>
    </div>

    <div class="section" id="zend.controller.quickstart.go"><div class="info"><h1 class="title">Início Rápido</h1></div>
        

        <p class="para">
            Se você necessita de informações mais detalhadas, veja as seções seguintes.
            Se você quiser apenas começar rápido, continue lendo.
        </p>

        <div class="section" id="zend.controller.quickstart.go.directory"><div class="info"><h1 class="title">Criando a Estrutura de Arquivos</h1></div>
            

            <p class="para">
                O primeiro passo é criar sua estrutura de arquivos.
                A estrutura típica é a seguinte:
            </p>

            <pre class="programlisting brush: php">
application/
    controllers/
        IndexController.php
    models/
    views/
        scripts/
            index/
                index.phtml
        helpers/
        filters/
html/
    .htaccess
    index.php
</pre>

        </div>

        <div class="section" id="zend.controller.quickstart.go.docroot"><div class="info"><h1 class="title">Estabelecendo seu Documento Raiz</h1></div>
            

            <p class="para">
                No seu servidor web, defina seu documento raiz para o diretório
                <var class="filename">html/</var> da estrutura de arquivos acima mencionada.
            </p>
        </div>

        <div class="section" id="zend.controller.quickstart.go.rewrite"><div class="info"><h1 class="title">Criando as Regras de Reescrita</h1></div>
            

            <p class="para">
                Edite o arquivo <var class="filename">html/.htaccess</var> acima para ficar como:
            </p>

            <pre class="programlisting brush: php">
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
</pre>


            <blockquote class="note"><p><b class="note">Note</b>: <span class="info"><b>Saiba mais sobre o mod_rewrite</b><br /></span>
                

                <p class="para">
                    As regras de reescrita acima permitem o acesso a qualquer arquivo no documento
                    raiz de seu host virtual. Se houver arquivos que você não quer expor desta
                    maneira, você pode ser mais restritivo em suas regras. Vá até o site do Apache
                    para <a href="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html" class="link external">&raquo; aprender mais
                        sobre o mod_rewrite</a>.
                </p>
            </p></blockquote>

            <p class="para">
                Se estiver usando o <acronym class="acronym">IIS</acronym> 7.0, utilize o seguinte como sua
                configuração de reescrita:
            </p>

            <pre class="programlisting brush: xml">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;configuration&gt;
     &lt;system.webServer&gt;
         &lt;rewrite&gt;
             &lt;rules&gt;
                 &lt;rule name=&quot;Imported Rule 1&quot; stopProcessing=&quot;true&quot;&gt;
                     &lt;match url=&quot;^.*$&quot; /&gt;
                     &lt;conditions logicalGrouping=&quot;MatchAny&quot;&gt;
                         &lt;add input=&quot;{REQUEST_FILENAME}&quot;
                             matchType=&quot;IsFile&quot; pattern=&quot;&quot;
                             ignoreCase=&quot;false&quot; /&gt;
                         &lt;add input=&quot;{REQUEST_FILENAME}&quot;
                             matchType=&quot;IsDirectory&quot;
                             pattern=&quot;&quot; ignoreCase=&quot;false&quot; /&gt;
                     &lt;/conditions&gt;
                     &lt;action type=&quot;None&quot; /&gt;
                 &lt;/rule&gt;
                 &lt;rule name=&quot;Imported Rule 2&quot; stopProcessing=&quot;true&quot;&gt;
                     &lt;match url=&quot;^.*$&quot; /&gt;
                     &lt;action type=&quot;Rewrite&quot; url=&quot;index.php&quot; /&gt;
                 &lt;/rule&gt;
             &lt;/rules&gt;
         &lt;/rewrite&gt;
     &lt;/system.webServer&gt;
&lt;/configuration&gt;
</pre>


            <p class="para">
                As regras acima irão encaminhar os pedidos de recursos existentes (links
                simbólicos existentes, arquivos não vazios, ou diretórios não vazios) nesse
                sentido, e todos os outros pedidos para o controlador frontal.
            </p>

            <blockquote class="note"><p><b class="note">Note</b>: 
                <p class="para">
                    As regras de reescrita acima são para o Apache, para exemplos de regras de
                    reescrita de outros servidores web, consulte a <a href="zend.controller.router.html#zend.controller.router.introduction" class="link">documentação do roteador</a>.
                </p>
            </p></blockquote>
        </div>

        <div class="section" id="zend.controller.quickstart.go.bootstrap"><div class="info"><h1 class="title">Criando o Arquivo de Inicialização</h1></div>
            

            <p class="para">
                O arquivo de inicialização é a página onde passam todas as requisições
                -- <var class="filename">html/index.php</var> no caso. Abra o arquivo
                <var class="filename">html/index.php</var> em um editor de sua escolha
                e adicione o seguinte:
            </p>

            <pre class="programlisting brush: php">
Zend_Controller_Front::run(&#039;/path/to/app/controllers&#039;);
</pre>


            <p class="para">
                Isto irá instanciar e despachar o controlador frontal, que irá encaminhar as
                requisições para os controladores de ação.
            </p>
        </div>

        <div class="section" id="zend.controller.quickstart.go.controller"><div class="info"><h1 class="title">Criando o Controlador de Ação Padrão</h1></div>
            

            <p class="para">
                Antes de discutir sobre os controladores de ação, você deve primeiro entender como
                as requisições são roteadas no Zend Framework. Por padrão, o primeiro seguimento
                de um caminho de um <acronym class="acronym">URL</acronym> aponta para um controlador, o segundo
                para uma ação. Por exemplo, dado o <acronym class="acronym">URL</acronym>
                <var class="filename">http://framework.zend.com/roadmap/components</var>, o caminho é
                <var class="filename">/roadmap/components</var>, que irá apontar para o controlador
                <em class="emphasis">roadmap</em> e para a ação <em class="emphasis">components</em>. Se
                nenhuma ação for informada, a ação <em class="emphasis">index</em> é assumida, e se
                nenhum controlador for informado, o controlador <em class="emphasis">index</em> é
                assumido (seguindo a convenção do Apache que mapeia um
                <em class="emphasis">DirectoryIndex</em> automaticamente).
            </p>

            <p class="para">
                O despachador do <span class="classname">Zend_Controller</span> toma o valor do
                controlador e mapeia-o para uma classe. Por padrão, ele pega o nome do
                controlador, com a primeira letra em maiúsculo, e acrescenta a palavra
                <em class="emphasis">Controller</em>. Sendo assim, em nosso exemplo acima, o
                controlador <em class="emphasis">roadmap</em> é mapeado para a classe
                <span class="classname">RoadmapController</span>.
            </p>

            <p class="para">
                Semelhantemente, o valor da ação é mapeado para um método da classe do controlador.
                Por padrão, o valor é transformado em letras minúsculas, e a palavra
                <em class="emphasis">Action</em> é acrescentada. Sendo assim, em nosso exemplo acima, a
                ação <em class="emphasis">components</em> torna-se
                 <span class="methodname">componentsAction()</span>, e o método final chamado é
                 <span class="methodname">RoadmapController::componentsAction()</span>.
            </p>

            <p class="para">
                Então, seguindo em frente, vamos agora criar um controlador de ação padrão e um
                método de ação. Como mencionado anteriormente, o controlador padrão e a ação são
                ambos chamados <em class="emphasis">index</em>. Abra o arquivo
                <var class="filename">application/controllers/IndexController.php</var>, e introduza
                o seguinte:
            </p>

            <pre class="programlisting brush: php">
/** Zend_Controller_Action */
class IndexController extends Zend_Controller_Action
{
    public function indexAction()
    {
    }
}
</pre>


            <p class="para">
                O auxiliar de ação <a href="zend.controller.actionhelpers.html#zend.controller.actionhelpers.viewrenderer" class="link">ViewRenderer</a> é
                habilitado por padrão. Isto significa que apenas definindo um método de ação
                simples e o script de visão correspondente, você terá o seu conteúdo mostrador
                imediatamente. Por padrão, <span class="classname">Zend_View</span> é usado como a camada
                de Visualização do <acronym class="acronym">MVC</acronym>. O <em class="emphasis">ViewRenderer</em>
                faz alguma mágica, e usa o nome do controlador (ex.: <em class="emphasis">index</em>)
                e o nome da ação atual (ex.: <em class="emphasis">index</em>) para determinar qual
                modelo mostrar. Por padrão, modelos terminam com a extensão
                <var class="filename">.phtml</var>, então isto significa que, no exemplo acima o modelo
                <var class="filename">index/index.phtml</var> será mostrado. Adicionalmente, o
                <em class="emphasis">ViewRenderer</em> automaticamente assume que o diretório
                <var class="filename">views/</var>, que está no mesmo nível que do diretório do
                controlador, será o diretório base de visualização, e que o atual script de
                visualização estará no subdiretório <var class="filename">views/scripts/</var>, Sendo
                assim, o modelo mostrado é encontrado em
                <var class="filename">application/views/scripts/index/index.phtml</var>.
            </p>
        </div>

        <div class="section" id="zend.controller.quickstart.go.view"><div class="info"><h1 class="title">Criando o Script de Visualização</h1></div>
            

            <p class="para">
                Com mensionado <a href="zend.controller.quickstart.html#zend.controller.quickstart.go.controller" class="link">na seção
                anterior</a>, scripts de visualização são encontrados em
                <var class="filename">application/views/scripts/</var>; O script padrão para o
                controlador e ação padrão está em
                <var class="filename">application/views/scripts/index/index.phtml</var>. Crie este
                arquivo e escreva nele algum <acronym class="acronym">HTML</acronym>:
            </p>

            <pre class="programlisting brush: php">
&lt;!DOCTYPE html
PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;
&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
  &lt;title&gt;Meu primeiro aplicativo em Zend Framework&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;h1&gt;Olá, Mundo!&lt;/h1&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>

        </div>

        <div class="section" id="zend.controller.quickstart.go.errorhandler"><div class="info"><h1 class="title">Criando o Controlador de Erro</h1></div>
            

            <p class="para">
                Por padrão, o <a href="zend.controller.plugins.html#zend.controller.plugins.standard.errorhandler" class="link">plugin
                do manipulador de erro</a> é registrado. Este plugin espera que um controlador
                para manipular erros exista. Por padrão, ele assume um
                <em class="emphasis">ErrorController</em> no módulo padrão com um método
                 <span class="methodname">errorAction()</span>:
            </p>

            <pre class="programlisting brush: php">
class ErrorController extends Zend_Controller_Action
{
    public function errorAction()
    {
    }
}
</pre>


            <p class="para">
                Assumindo a estrutura de diretório já discutida, este arquivo estará em
                <var class="filename">application/controllers/ErrorController.php</var>. Você também
                precisará criar o script de visualização em
                <var class="filename">application/views/scripts/error/error.phtml</var>; o conteúdo
                do exemplo parecerá com:
            </p>

            <pre class="programlisting brush: php">
&lt;!DOCTYPE html
PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;
&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
  &lt;title&gt;Erro&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;h1&gt;Ocorreu um erro&lt;/h1&gt;
    &lt;p&gt;Ocorreu um erro; por favor, tente novamente mais tarde.&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>

        </div>

        <div class="section" id="zend.controller.quickstart.go.finish"><div class="info"><h1 class="title">Veja o Site!</h1></div>
            

            <p class="para">
                Com o seu primeiro controlador e visualizador em suas mãos, você agora pode abrir
                o seu navegador e navegar até o site. Assumindo que o seu domínio é
                <var class="filename">example.com</var>, qualquer dos seguintes <acronym class="acronym">URL</acronym>s
                irão mostrar a página que acabamos de criar:
            </p>

            <ul class="itemizedlist">
                <li class="listitem">
                    <p class="para"><var class="filename">http://example.com/</var></p>
                </li>

                <li class="listitem">
                    <p class="para"><var class="filename">http://example.com/index</var></p>
                </li>

                <li class="listitem">
                    <p class="para"><var class="filename">http://example.com/index/index</var></p>
                </li>
            </ul>

            <p class="para">
                Agora você está pronto para iniciar a criação de mais controladores
                e metódos de ação. Parabéns!
            </p>
        </div>
    </div>
</div>
        <hr />

            <table width="100%">
                <tr>
                    <td width="25%" style="text-align: left;">
                    <a href="zend.controller.html">Zend_Controller</a>
                    </td>

                    <td width="50%" style="text-align: center;">
                        <div class="up"><span class="up"><a href="zend.controller.html">Zend_Controller</a></span><br />
                        <span class="home"><a href="manual.html">Guia de Refer&ecirc;ncia do Programador</a></span></div>
                    </td>

                    <td width="25%" style="text-align: right;">
                        <div class="next" style="text-align: right; float: right;"><a href="zend.controller.basics.html">O B&aacute;sico de Zend_Controller</a></div>
                    </td>
                </tr>
            </table>
</td>
        <td style="font-size: smaller;" width="15%"> <style type="text/css">
#leftbar {
	float: left;
	width: 186px;
	padding: 5px;
	font-size: smaller;
}
ul.toc {
	margin: 0px 5px 5px 5px;
	padding: 0px;
}
ul.toc li {
	font-size: 85%;
	margin: 1px 0 1px 1px;
	padding: 1px 0 1px 11px;
	list-style-type: none;
	background-repeat: no-repeat;
	background-position: center left;
}
ul.toc li.header {
	font-size: 115%;
	padding: 5px 0px 5px 11px;
	border-bottom: 1px solid #cccccc;
	margin-bottom: 5px;
}
ul.toc li.active {
	font-weight: bold;
}
ul.toc li a {
	text-decoration: none;
}
ul.toc li a:hover {
	text-decoration: underline;
}
</style>
 <ul class="toc">
  <li class="header home"><a href="manual.html">Guia de Refer&ecirc;ncia do Programador</a></li>
  <li class="header up"><a href="manual.html">Guia de Refer&ecirc;ncia do Programador</a></li>
  <li class="header up"><a href="reference.html">Refer&ecirc;ncia do Zend Framework</a></li>
  <li class="header up"><a href="zend.controller.html">Zend_Controller</a></li>
  <li class="active"><a href="zend.controller.quickstart.html">Guia de In&iacute;cio R&aacute;pido do Zend_Controller</a></li>
  <li><a href="zend.controller.basics.html">O B&aacute;sico de Zend_Controller</a></li>
  <li><a href="zend.controller.front.html">The Front Controller</a></li>
  <li><a href="zend.controller.request.html">The Request Object</a></li>
  <li><a href="zend.controller.router.html">The Standard Router</a></li>
  <li><a href="zend.controller.dispatcher.html">The Dispatcher</a></li>
  <li><a href="zend.controller.action.html">Action Controllers</a></li>
  <li><a href="zend.controller.actionhelpers.html">Action Helpers</a></li>
  <li><a href="zend.controller.response.html">The Response Object</a></li>
  <li><a href="zend.controller.plugins.html">Plugins</a></li>
  <li><a href="zend.controller.modular.html">Using a Conventional Modular Directory Structure</a></li>
  <li><a href="zend.controller.exceptions.html">MVC Exceptions</a></li>
 </ul>
 </td>
    </tr>
</table>

<script type="text/javascript" src="../js/shCore.js"></script>
<script type="text/javascript" src="../js/shAutoloader.js"></script>
<script type="text/javascript" src="../js/main.js"></script>

</body>
</html>